﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Text;
using System.Drawing.Imaging;

public partial class UserControls_Capcha : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
            CreateCaptcha();  
    }
    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        if (txtCaptcha.Text.Equals(Session["captcha"].ToString(), StringComparison.OrdinalIgnoreCase))
            lblMessage.Text = "Captcha chính xác";
        else
            lblMessage.Text = "Captcha chưa chính xác. Vui lòng nhập lại!";
    }
    protected void imbReLoad_Click(object sender, System.Web.UI.ImageClickEventArgs e)
    {
        CreateCaptcha();
        lblMessage.Text = "";
    }  
    private void CreateCaptcha()
    {
        // font cho captcha
        string[] fonts = { "Arial Black", "Lucida Sans Unicode", "Time New Roman" };
        // số lượng kí tự của captcha
        const byte LENGTH = 6;
        // chuỗi để lấy các kí tự sẽ sử dụng cho captcha  
        const string chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijk lmnopqrstuvwxyz";
        // tạo ảnh bitmap.
        using (Bitmap bmp = new Bitmap(120, 30))
        {
            using (Graphics g = Graphics.FromImage(bmp))
            {
                // Tạo nền cho ảnh dạng nhiều dấu chấm
                HatchBrush brush = new HatchBrush(HatchStyle.DottedDiamond, Color.Green, Color.GreenYellow);
                g.FillRegion(brush, g.Clip);
                // Lưu chuỗi captcha trong quá trình tạo  
                StringBuilder strCaptcha = new StringBuilder();
                Random rand = new Random();
                for (int i = 0; i < LENGTH; i++)
                {
                    // Lấy kí tự ngẫu nhiên từ mảng chars  
                    string str = chars[rand.Next(chars.Length)].ToString();
                    strCaptcha.Append(str);
                    // Tạo font với tên font ngẫu nhiên chọn từ mảng fonts  
                    Font font = new Font(fonts[rand.Next(fonts.Length)], 14, FontStyle.Strikeout | FontStyle.Italic);
                    // Lấy kích thước của kí tự  
                    SizeF size = g.MeasureString(str, font);
                    // Vẽ kí tự đó ra ảnh tại vị trí tăng dần theo i, vị trí top ngẫu nhiên  
                    g.DrawString(str, font,
                    Brushes.Chocolate, i * size.Width + 3, rand.Next(2, 10));
                    font.Dispose();
                }
                // Lưu captcha vào session  
                Session["captcha"] = strCaptcha.ToString();
                // Lưu ảnh vào thư mục captcha với tên ảnh dựa theo IP  
                string path = "/Images/Captcha/" + Request.UserHostAddress + ".gif";
                bmp.Save(Server.MapPath("") + "/" + path, ImageFormat.Gif);
                imgCaptcha.ImageUrl = path;
            }
        }
    }  
}